package com.l.Thread;

/**
 * Thread中的常用的方法：
 * 1.start():启用当前线程：调用当前线程的run()
 * 2.run()：通常需要重写Thread类中的此方法，将创建的线程要执行的操作声明在此方法中
 * 3.currentThread():静态方法，返回执行当前代码的线程
 * 4.getName()：获取当前线程的名字
 * 5.setName():设置当前线程的名字
 * 6.yield():释放当前CPU的执行权，有可能再次分配到该线程
 * 7.join():在线程a中调用线程b的join()，此时的线程a就进入阻塞状态，知道线程b完全执行完以后，线程a才
 *          结束阻塞状态。
 * 8.stop():已过时。当执行此方法时，强制结束当前线程
 * 9.sleep(long millis):让当前线程“睡眠”指定的millis毫秒。在指定的millis时间内，当前线程是
 *                      阻塞的状态。
 * 10.isAlive():判断当前线程是否存活
 *
 *
 * 线程的优先级：
 * 1.
 * MAX_PRIORITY:    10
 * MIN_PRIORITY:    1
 * NORM_PRIORITY:   5   -->默认优先级
 * 2.如何获取和设置当前线程的优先级
 *  getPriority():  获取线程的优先级
 *  setPriority(int p): 设置线程的优先级
 *
 *  说明：高优先级的线程要抢占低优先级线程cpu的执行权。但是只是从概率上来讲，高优先级的线程高概率的情况下
 *  被执行。并不意味着只有当高优先级的线程执行完毕以后，在执行低优先级的线程
 *
 *
 *
 * @author Mc.Chai
 * @program: Java基础
 * @create 2021-11-09-16:07 16:07
 */
public class TestThreadMethod {
    public static void main(String[] args) {
        ThreadMethod threadMethod = new ThreadMethod();
        threadMethod.setName("线程一");
        threadMethod.setPriority(Thread.MAX_PRIORITY);      //给线程一设立高的优先级
        threadMethod.start();
        //主线程的命名
        Thread.currentThread().setName("主线程");
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);     //给主线程设立低的优先级
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i+"优先级："+Thread.currentThread().getPriority());
            /*if (i==20){
                try {
                    threadMethod.join();    //等待threadMethod结束之后在调用
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }*/

        }
        //System.out.println(threadMethod.isAlive());
    }
}
class ThreadMethod extends Thread{
    public ThreadMethod() {
    }
    //可以通过构造方法进行线程名称的赋值
    public ThreadMethod(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+":"+i+"优先级"+getPriority());
            /*if (i==20){
                this.yield();
            }*/
            /*try {
                sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }*/
        }

    }
}
